/*
    SUSAN® - Sole of Unix Save ANything

   Copyright (C) 2020-2020 Hechzh Property

   
*/

#ifndef BAREOS_SRC_DIRD_DBCOPY_DATABASE_EXPORT_H_
#define BAREOS_SRC_DIRD_DBCOPY_DATABASE_EXPORT_H_

#include "dird/dbcopy/row_data.h"

#include <memory>

class BareosDb;
class DatabaseConnection;
class DatabaseTableDescriptions;

class DatabaseExport {
 public:
  DatabaseExport(const DatabaseConnection& db_connection);
  virtual ~DatabaseExport();

  enum class InsertMode
  {
    kSqlInsert,
    kSqlCopy
  };

  static std::unique_ptr<DatabaseExport> Create(
      const DatabaseConnection& db_connection,
      InsertMode mode = InsertMode::kSqlCopy,
      bool clear_tables = false);

  virtual bool StartTable(const std::string& table_name) = 0;
  virtual void EndTable(const std::string& table_name) = 0;

  virtual void CopyStart() = 0;
  virtual void CopyRow(RowData& origin_data, std::string&) = 0;
  virtual void CopyEnd() = 0;

 protected:
  BareosDb* db_{};
  std::unique_ptr<DatabaseTableDescriptions> table_descriptions_;
};

#endif  // BAREOS_SRC_DIRD_DBCOPY_DATABASE_EXPORT_H_
